package editorsvg.editor.documento;

import editorsvg.editor.atributos.AtrString;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.geom.AffineTransform;

/**
 * Representa un elemento que es una instancia de un símbolo
 * @author Jorge Berjano
 */
public class ElementoInstanciaSimbolo extends ElementoGrafico {
    private AtrString href = new AtrString();
    private Simbolo simbolo;

    public ElementoInstanciaSimbolo() {        
    }
    
    public ElementoInstanciaSimbolo(Simbolo simbolo) {
        this.simbolo = simbolo;
    }
    
    public AtrString href() {
        return href;
    }

    public void centrarEn(double x, double y) {
        double dx = x - getCentro().getX();
        double dy = y - getCentro().getY();
        transformacion().desplazar(dx, dy);
    }

    @Override
    public Shape getContorno() {
        return transformacion().transformar(simbolo.getContorno());
    }

    @Override
    public void pintar(Graphics2D graphics, AjustesGraficos ajustes) {
        super.pintar(graphics, ajustes);
        
        AffineTransform tranformacionInicial = graphics.getTransform();
        graphics.transform(getTransformacion());
        
        simbolo.pintar(graphics, ajustes);
        
        graphics.setTransform(tranformacionInicial);
    }

    @Override
    public void actualizar() {
//        simbolo.actualizar();
    }
    
    

    @Override
    public boolean recorrer(Visitante visitante) {
        if (!super.recorrer(visitante)) {
            return false;
        }
        return simbolo.recorrer(visitante);
    }

    @Override
    public String getNombreTag() {
        return PrototipoElemento.use.name();
    }
}
